package org.dbp.registros.propertysupport;

import java.beans.PropertyEditorSupport;
import java.text.SimpleDateFormat;

import org.dbp.registros.RegistroDbpUtils;
import org.springframework.util.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
 * 
 * Es la clase encarga de cargar los registro de una fecha o no.
 * 
 * @author davidTorre
 *
 */
public class FechaDbpRegistro extends PropertyEditorSupport{

	private static Logger logger = LoggerFactory.getLogger(FechaDbpRegistro.class);
	
	private final SimpleDateFormat dateFormat;
	private final Boolean permitirVacia;
	private final RegistroDbpUtils registroDbpUtils;

	public FechaDbpRegistro(final String formatoFecha,final Boolean permitirVacia){
		this(formatoFecha,permitirVacia,true);
	}

	
	public FechaDbpRegistro(final String formatoFecha,final Boolean permitirVacia,final Boolean redondearFecha){
		this.dateFormat=new SimpleDateFormat(formatoFecha);
		this.dateFormat.setLenient(redondearFecha);
		this.permitirVacia=permitirVacia;
		this.registroDbpUtils = RegistroDbpUtils.obtenerInstancia();
	}
	@Override
	public void setAsText(final String text) throws IllegalArgumentException {
		try {
			if (this.permitirVacia && !StringUtils.hasText(text)) {
				setValue(null);
			}else if(dateFormat!=null){
					setValue(dateFormat.parse(text));
			}else{
				throw new Exception("No esta declarado el date format");
			}
		} catch (Exception e) {
			registroDbpUtils.procesarError(
					"Se ha producir el siguiente error al convertir la cadena de texto, en el conversi�n ["+e.getMessage()+"]"
					, e
					, logger);
		}
	}
	
	@Override
	public void setValue(final Object value){
		super.setValue(value);
	}
	
	@Override
	public String getAsText(){
		final Object value = getValue();
		String valdev="";
		if(value==null){
			valdev="";
		}else if(this.dateFormat!=null){
			valdev=dateFormat.format(value);
		}else{
			registroDbpUtils.procesarError("No esta declarado el date format"
					, logger);
		}
		return valdev;
	}
	
}
